| 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377 | 1
1
59
1
1
1210
280
280
280
280
280
2
12
1
1
1
1
2
2
2
2
2
2
2
2
1
1
1
3
3
3
3
3
3
3
3
3
1
1
1
54
54
352
352
352
352
2812
2812
2812
272
136
136
136
272
67
67
2473
505
1968
19
1949
371
352
352
352
19
19
19
19
333
333
333
333
352
352
54
1
53
53
1
1
1
1
53
53
53
53
53
53
53
53
1
4
1
1
1
1
4
4
1
3
4
4
4
4
4
4
1
7
1
3
3
3
3
3
1
102
102
1
84
84
84
84
84
14
14
14
14
14
6
6
84
21
21
21
9
15
9
21
1
3
3
17
7
7
7
7
1
102
102
642
372
270
270
102
1
6
6
6
7
6
6
3
6
6
6
3
3
3
6
1
| System.register(['aurelia-templating', 'aurelia-binding', './syntax-interpreter', 'aurelia-logging'], function (_export) {
'use strict';
var BindingLanguage, Parser, ObserverLocator, BindingExpression, NameExpression, bindingMode, SyntaxInterpreter, LogManager, info, logger, TemplatingBindingLanguage, InterpolationBindingExpression, InterpolationBinding;
function _classCallCheck(instance, Constructor) { Iif (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
function _inherits(subClass, superClass) { Iif (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); Eif (superClass) subClass.__proto__ = superClass; }
return {
setters: [function (_aureliaTemplating) {
BindingLanguage = _aureliaTemplating.BindingLanguage;
}, function (_aureliaBinding) {
Parser = _aureliaBinding.Parser;
ObserverLocator = _aureliaBinding.ObserverLocator;
BindingExpression = _aureliaBinding.BindingExpression;
NameExpression = _aureliaBinding.NameExpression;
bindingMode = _aureliaBinding.bindingMode;
}, function (_syntaxInterpreter) {
SyntaxInterpreter = _syntaxInterpreter.SyntaxInterpreter;
}, function (_aureliaLogging) {
LogManager = _aureliaLogging;
}],
execute: function () {
info = {};
logger = LogManager.getLogger('templating-binding');
TemplatingBindingLanguage = (function (_BindingLanguage) {
function TemplatingBindingLanguage(parser, observerLocator, syntaxInterpreter) {
_classCallCheck(this, TemplatingBindingLanguage);
_BindingLanguage.call(this);
this.parser = parser;
this.observerLocator = observerLocator;
this.syntaxInterpreter = syntaxInterpreter;
this.emptyStringExpression = this.parser.parse('\'\'');
syntaxInterpreter.language = this;
this.attributeMap = syntaxInterpreter.attributeMap = {
'contenteditable': 'contentEditable',
'for': 'htmlFor',
'tabindex': 'tabIndex',
'textcontent': 'textContent',
'innerhtml': 'innerHTML',
// HTMLInputElement https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement
'maxlength': 'maxLength',
'minlength': 'minLength',
'formaction': 'formAction',
'formenctype': 'formEncType',
'formmethod': 'formMethod',
'formnovalidate': 'formNoValidate',
'formtarget': 'formTarget',
'rowspan': 'rowSpan',
'colspan': 'colSpan',
'scrolltop': 'scrollTop',
'scrollleft': 'scrollLeft'
};
}
_inherits(TemplatingBindingLanguage, _BindingLanguage);
TemplatingBindingLanguage.inject = function inject() {
return [Parser, ObserverLocator, SyntaxInterpreter];
};
TemplatingBindingLanguage.prototype.inspectAttribute = function inspectAttribute(resources, attrName, attrValue) {
var parts = attrName.split('.');
info.defaultBindingMode = null;
Iif (parts.length == 2) {
info.attrName = parts[0].trim();
info.attrValue = attrValue;
info.command = parts[1].trim();
if (info.command === 'ref') {
info.expression = new NameExpression(attrValue, info.attrName);
info.command = null;
info.attrName = 'ref';
} else {
info.expression = null;
}
} else Iif (attrName == 'ref') {
info.attrName = attrName;
info.attrValue = attrValue;
info.command = null;
info.expression = new NameExpression(attrValue, 'element');
} else {
info.attrName = attrName;
info.attrValue = attrValue;
info.command = null;
info.expression = this.parseContent(resources, attrName, attrValue);
}
return info;
};
TemplatingBindingLanguage.prototype.createAttributeInstruction = function createAttributeInstruction(resources, element, info, existingInstruction) {
var instruction;
if (info.expression) {
if (info.attrName === 'ref') {
return info.expression;
}
instruction = existingInstruction || { attrName: info.attrName, attributes: {} };
instruction.attributes[info.attrName] = info.expression;
} else if (info.command) {
instruction = this.syntaxInterpreter.interpret(resources, element, info, existingInstruction);
}
return instruction;
};
TemplatingBindingLanguage.prototype.parseText = function parseText(resources, value) {
return this.parseContent(resources, 'textContent', value);
};
TemplatingBindingLanguage.prototype.parseContent = function parseContent(resources, attrName, attrValue) {
var i = attrValue.indexOf('${', 0),
ii = attrValue.length,
char,
pos = 0,
open = 0,
quote = null,
interpolationStart,
parts,
partIndex = 0;
while (i >= 0 && i < ii - 2) {
open = 1;
interpolationStart = i;
i += 2;
do {
char = attrValue[i];
i++;
switch (char) {
case '\'':
case '"':
if (quote === null) {
quote = char;
} else Eif (quote === char) {
quote = null;
}
continue;
case '\\':
i++;
continue;
}
if (quote !== null) {
continue;
}
if (char === '{') {
open++;
} else if (char === '}') {
open--;
}
} while (open > 0 && i < ii);
Eif (open === 0) {
// lazy allocate array
parts = parts || [];
if (attrValue[interpolationStart - 1] === '\\' && attrValue[interpolationStart - 2] !== '\\') {
// escaped interpolation
parts[partIndex] = attrValue.substring(pos, interpolationStart - 1) + attrValue.substring(interpolationStart, i);
partIndex++;
parts[partIndex] = this.emptyStringExpression;
partIndex++;
} else {
// standard interpolation
parts[partIndex] = attrValue.substring(pos, interpolationStart);
partIndex++;
parts[partIndex] = this.parser.parse(attrValue.substring(interpolationStart + 2, i - 1));
partIndex++;
}
pos = i;
i = attrValue.indexOf('${', i);
} else {
break;
}
}
// no interpolation.
if (partIndex === 0) {
return null;
}
// literal.
parts[partIndex] = attrValue.substr(pos);
return new InterpolationBindingExpression(this.observerLocator, this.attributeMap[attrName] || attrName, parts, bindingMode.oneWay, resources.valueConverterLookupFunction, attrName);
};
return TemplatingBindingLanguage;
})(BindingLanguage);
_export('TemplatingBindingLanguage', TemplatingBindingLanguage);
InterpolationBindingExpression = (function () {
function InterpolationBindingExpression(observerLocator, targetProperty, parts, mode, valueConverterLookupFunction, attribute) {
_classCallCheck(this, InterpolationBindingExpression);
this.observerLocator = observerLocator;
this.targetProperty = targetProperty;
this.parts = parts;
this.mode = mode;
this.valueConverterLookupFunction = valueConverterLookupFunction;
this.attribute = attribute;
this.discrete = false;
}
InterpolationBindingExpression.prototype.createBinding = function createBinding(target) {
return new InterpolationBinding(this.observerLocator, this.parts, target, this.targetProperty, this.mode, this.valueConverterLookupFunction);
};
return InterpolationBindingExpression;
})();
_export('InterpolationBindingExpression', InterpolationBindingExpression);
InterpolationBinding = (function () {
function InterpolationBinding(observerLocator, parts, target, targetProperty, mode, valueConverterLookupFunction) {
_classCallCheck(this, InterpolationBinding);
if (targetProperty === 'style') {
logger.info('Internet Explorer does not support interpolation in "style" attributes. Use the style attribute\'s alias, "css" instead.');
} else Iif (target.parentElement && target.parentElement.nodeName === 'TEXTAREA' && targetProperty === 'textContent') {
throw new Error('Interpolation binding cannot be used in the content of a textarea element. Use <textarea value.bind="expression"></textarea> instead.');
}
this.observerLocator = observerLocator;
this.parts = parts;
this.targetProperty = observerLocator.getObserver(target, targetProperty);
this.mode = mode;
this.valueConverterLookupFunction = valueConverterLookupFunction;
this.toDispose = [];
}
InterpolationBinding.prototype.getObserver = function getObserver(obj, propertyName) {
return this.observerLocator.getObserver(obj, propertyName);
};
InterpolationBinding.prototype.bind = function bind(source) {
this.source = source;
Eif (this.mode == bindingMode.oneWay) {
this.unbind();
this.connect();
this.setValue();
} else {
this.setValue();
}
};
InterpolationBinding.prototype.setValue = function setValue() {
var value = this.interpolate();
this.targetProperty.setValue(value);
};
InterpolationBinding.prototype.partChanged = function partChanged(newValue, oldValue, connecting) {
var _this = this;
var map, info;
Eif (!connecting) {
this.setValue();
}
if (oldValue instanceof Array) {
map = this.arrayPartMap;
info = map ? map.get(oldValue) : null;
Eif (info) {
info.refs--;
if (info.refs === 0) {
info.dispose();
map['delete'](oldValue);
}
}
}
if (newValue instanceof Array) {
map = this.arrayPartMap || (this.arrayPartMap = new Map());
info = map.get(newValue);
if (!info) {
info = {
refs: 0,
dispose: this.observerLocator.getArrayObserver(newValue).subscribe(function () {
return _this.setValue();
})
};
map.set(newValue, info);
}
info.refs++;
}
};
InterpolationBinding.prototype.connect = function connect() {
var info,
parts = this.parts,
source = this.source,
toDispose = this.toDispose = [],
partChanged = this.partChanged.bind(this),
i,
ii;
for (i = 0, ii = parts.length; i < ii; ++i) {
if (i % 2 === 0) {} else {
info = parts[i].connect(this, source);
Eif (info.observer) {
toDispose.push(info.observer.subscribe(partChanged));
}
Iif (info.value instanceof Array) {
partChanged(info.value, undefined, true);
}
}
}
};
InterpolationBinding.prototype.interpolate = function interpolate() {
var value = '',
parts = this.parts,
source = this.source,
valueConverterLookupFunction = this.valueConverterLookupFunction,
i,
ii,
temp;
for (i = 0, ii = parts.length; i < ii; ++i) {
if (i % 2 === 0) {
value += parts[i];
} else {
temp = parts[i].evaluate(source, valueConverterLookupFunction);
value += typeof temp !== 'undefined' && temp !== null ? temp.toString() : '';
}
}
return value;
};
InterpolationBinding.prototype.unbind = function unbind() {
var i,
ii,
toDispose = this.toDispose,
map = this.arrayPartMap;
Eif (toDispose) {
for (i = 0, ii = toDispose.length; i < ii; ++i) {
toDispose[i]();
}
}
this.toDispose = null;
if (map) {
for (var _iterator = map.values(), _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
Iif (_isArray) {
if (_i >= _iterator.length) break;
toDispose = _iterator[_i++];
} else {
_i = _iterator.next();
if (_i.done) break;
toDispose = _i.value;
}
toDispose.dispose();
}
map.clear();
}
this.arrayPartMap = null;
};
return InterpolationBinding;
})();
}
};
});
//do nothing
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9FaXNlbmJlcmdFZmZlY3QvRG9jdW1lbnRzL0dpdEh1Yi9UaGUgRHVyYW5kYWwgUHJvamVjdC9hdXJlbGlhL3RlbXBsYXRpbmctYmluZGluZy9zcmMvYmluZGluZy1sYW5ndWFnZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7K0hBS0ksSUFBSSxFQUNKLE1BQU0sRUFFRyx5QkFBeUIsRUF1S3pCLDhCQUE4QixFQXdCckMsb0JBQW9COzs7Ozs7OzsyQ0F2TWxCLGVBQWU7OytCQUNmLE1BQU07d0NBQUUsZUFBZTswQ0FBRSxpQkFBaUI7dUNBQUUsY0FBYztvQ0FBRSxXQUFXOzs2Q0FDdkUsaUJBQWlCOzs7OztBQUdyQixVQUFJLEdBQUcsRUFBRTtBQUNULFlBQU0sR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDLG9CQUFvQixDQUFDOztBQUUxQywrQkFBeUI7QUFFMUIsaUJBRkMseUJBQXlCLENBRXpCLE1BQU0sRUFBRSxlQUFlLEVBQUUsaUJBQWlCLEVBQUM7Z0NBRjNDLHlCQUF5Qjs7QUFHbEMscUNBQU8sQ0FBQztBQUNSLGNBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQ3JCLGNBQUksQ0FBQyxlQUFlLEdBQUcsZUFBZSxDQUFDO0FBQ3ZDLGNBQUksQ0FBQyxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQztBQUMzQyxjQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDdkQsMkJBQWlCLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztBQUNsQyxjQUFJLENBQUMsWUFBWSxHQUFHLGlCQUFpQixDQUFDLFlBQVksR0FBRztBQUNuRCw2QkFBaUIsRUFBQyxpQkFBaUI7QUFDbkMsaUJBQUssRUFBQyxTQUFTO0FBQ2Ysc0JBQVUsRUFBQyxVQUFVO0FBQ3JCLHlCQUFhLEVBQUUsYUFBYTtBQUM1Qix1QkFBVyxFQUFFLFdBQVc7O0FBRXhCLHVCQUFXLEVBQUMsV0FBVztB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UUFBUSxFQUFFLEdBQUcsRUFBRSxBQUFDLENBQUM7YUFDaEY7V0FDRjs7QUFFRCxpQkFBTyxLQUFLLENBQUM7U0FDZDs7QUExR0csNEJBQW9CLFdBNEd4QixNQUFNLEdBQUEsa0JBQUU7QUFDTixjQUFJLENBQUM7Y0FBRSxFQUFFO2NBQUUsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTO2NBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7O0FBRS9ELGNBQUcsU0FBUyxFQUFDO0FBQ1gsaUJBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFDO0FBQzVDLHVCQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzthQUNoQjtXQUNGOztBQUVELGNBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDOztBQUV0QixjQUFJLEdBQUcsRUFBRTtBQUNQLGlDQUFpQixHQUFHLENBQUMsTUFBTSxFQUFFLGtIQUFFOzs7QUFBM0IseUJBQVM7Ozs7QUFBVCx5QkFBUzs7O0FBQ1gsdUJBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQzthQUNyQjtBQUNELGVBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztXQUNiOztBQUVELGNBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1NBQzFCOztlQS9IRyxvQkFBb0IiLCJmaWxlIjoiL1VzZXJzL0Vpc2VuYmVyZ0VmZmVjdC9Eb2N1bWVudHMvR2l0SHViL1RoZSBEdXJhbmRhbCBQcm9qZWN0L2F1cmVsaWEvdGVtcGxhdGluZy1iaW5kaW5nL3NyYy9iaW5kaW5nLWxhbmd1YWdlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtCaW5kaW5nTGFuZ3VhZ2V9IGZyb20gJ2F1cmVsaWEtdGVtcGxhdGluZyc7XG5pbXBvcnQge1BhcnNlciwgT2JzZXJ2ZXJMb2NhdG9yLCBCaW5kaW5nRXhwcmVzc2lvbiwgTmFtZUV4cHJlc3Npb24sIGJpbmRpbmdNb2RlfSBmcm9tICdhdXJlbGlhLWJpbmRpbmcnO1xuaW1wb3J0IHtTeW50YXhJbnRlcnByZXRlcn0gZnJvbSAnLi9zeW50YXgtaW50ZXJwcmV0ZXInO1xuaW1wb3J0ICogYXMgTG9nTWFuYWdlciBmcm9tICdhdXJlbGlhLWxvZ2dpbmcnO1xuXG52YXIgaW5mbyA9IHt9LFxuICAgIGxvZ2dlciA9IExvZ01hbmFnZXIuZ2V0TG9nZ2VyKCd0ZW1wbGF0aW5nLWJpbmRpbmcnKTtcblxuZXhwb3J0IGNsYXNzIFRlbXBsYXRpbmdCaW5kaW5nTGFuZ3VhZ2UgZXh0ZW5kcyBCaW5kaW5nTGFuZ3VhZ2Uge1xuICBzdGF0aWMgaW5qZWN0KCkgeyByZXR1cm4gW1BhcnNlciwgT2JzZXJ2ZXJMb2NhdG9yLCBTeW50YXhJbnRlcnByZXRlcl07IH1cblx0Y29uc3RydWN0b3IocGFyc2VyLCBvYnNlcnZlckxvY2F0b3IsIHN5bnRheEludGVycHJldGVyKXtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xuICAgIHRoaXMub2JzZXJ2ZXJMb2NhdG9yID0gb2JzZXJ2ZXJMb2NhdG9yO1xuICAgIHRoaXMuc3ludGF4SW50ZXJwcmV0ZXIgPSBzeW50YXhJbnRlcnByZXRlcjtcbiAgICB0aGlzLmVtcHR5U3RyaW5nRXhwcmVzc2lvbiA9IHRoaXMucGFyc2VyLnBhcnNlKCdcXCdcXCcnKTtcbiAgICBzeW50YXhJbnRlcnByZXRlci5sYW5ndWFnZSA9IHRoaXM7XG4gICAgdGhpcy5hdHRyaWJ1dGVNYXAgPSBzeW50YXhJbnRlcnByZXRlci5hdHRyaWJ1dGVNYXAgPSB7XG4gICAgICAnY29udGVudGVkaXRhYmxlJzonY29udGVudEVkaXRhYmxlJyxcbiAgICAgICdmb3InOidodG1sRm9yJyxcbiAgICAgICd0YWJpbmRleCc6J3RhYkluZGV4JyxcbiAgICAgICd0ZXh0Y29udGVudCc6ICd0ZXh0Q29udGVudCcsXG4gICAgICAnaW5uZXJodG1sJzogJ2lubmVySFRNTCcsXG4gICAgICAvLyBIVE1MSW5wdXRFbGVtZW50IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MSW5wdXRFbGVtZW50XG4gICAgICAnbWF4bGVuZ3RoJzonbWF4TGVuZ3RoJyxcbiAgICAgICdtaW5sZW5ndGgnOidtaW5MZW5ndGgnLFxuICAgICAgJ2Zvcm1hY3Rpb24nOidmb3JtQWN0aW9uJyxcbiAgICAgICdmb3JtZW5jdHlwZSc6J2Zvcm1FbmNUeXBlJyxcbiAgICAgICdmb3JtbWV0aG9kJzonZm9ybU1ldGhvZCcsXG4gICAgICAnZm9ybW5vdmFsaWRhdGUnOidmb3JtTm9WYWxpZGF0ZScsXG4gICAgICAnZm9ybXRhcmdldCc6J2Zvcm1UYXJnZXQnLFxuICAgICAgJ3Jvd3NwYW4nOidyb3dTcGFuJyxcbiAgICAgICdjb2xzcGFuJzonY29sU3BhbicsXG4gICAgICAnc2Nyb2xsdG9wJzonc2Nyb2xsVG9wJyxcbiAgICAgICdzY3JvbGxsZWZ0Jzonc2Nyb2xsTGVmdCdcbiAgICB9O1xuICB9XG5cbiAgaW5zcGVjdEF0dHJpYnV0ZShyZXNvdXJjZXMsIGF0dHJOYW1lLCBhdHRyVmFsdWUpe1xuICAgIHZhciBwYXJ0cyA9IGF0dHJOYW1lLnNwbGl0KCcuJyk7XG5cbiAgICBpbmZvLmRlZmF1bHRCaW5kaW5nTW9kZSA9IG51bGw7XG5cbiAgICBpZihwYXJ0cy5sZW5ndGggPT0gMil7XG4gICAgICBpbmZvLmF0dHJOYW1lID0gcGFydHNbMF0udHJpbSgpO1xuICAgICAgaW5mby5hdHRyVmFsdWUgPSBhdHRyVmFsdWU7XG4gICAgICBpbmZvLmNvbW1hbmQgPSBwYXJ0c1sxXS50cmltKCk7XG5cbiAgICAgIGlmKGluZm8uY29tbWFuZCA9PT0gJ3JlZicpe1xuICAgICAgICBpbmZvLmV4cHJlc3Npb24gPSBuZXcgTmFtZUV4cHJlc3Npb24oYXR0clZhbHVlLCBpbmZvLmF0dHJOYW1lKTtcbiAgICAgICAgaW5mby5jb21tYW5kID0gbnVsbDtcbiAgICAgICAgaW5mby5hdHRyTmFtZSA9ICdyZWYnO1xuICAgICAgfSBlbHNle1xuICAgICAgICBpbmZvLmV4cHJlc3Npb24gPSBudWxsO1xuICAgICAgfVxuICAgIH1lbHNlIGlmKGF0dHJOYW1lID09ICdyZWYnKXtcbiAgICAgIGluZm8uYXR0ck5hbWUgPSBhdHRyTmFtZTtcbiAgICAgIGluZm8uYXR0clZhbHVlID0gYXR0clZhbHVlO1xuICAgICAgaW5mby5jb21tYW5kID0gbnVsbDtcbiAgICAgIGluZm8uZXhwcmVzc2lvbiA9IG5ldyBOYW1lRXhwcmVzc2lvbihhdHRyVmFsdWUsICdlbGVtZW50Jyk7XG4gICAgfWVsc2V7XG4gICAgICBpbmZvLmF0dHJOYW1lID0gYXR0ck5hbWU7XG4gICAgICBpbmZvLmF0dHJWYWx1ZSA9IGF0dHJWYWx1ZTtcbiAgICAgIGluZm8uY29tbWFuZCA9IG51bGw7XG4gICAgICBpbmZvLmV4cHJlc3Npb24gPSB0aGlzLnBhcnNlQ29udGVudChyZXNvdXJjZXMsIGF0dHJOYW1lLCBhdHRyVmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiBpbmZvO1xuICB9XG5cblx0Y3JlYXRlQXR0cmlidXRlSW5zdHJ1Y3Rpb24ocmVzb3VyY2VzLCBlbGVtZW50LCBpbmZvLCBleGlzdGluZ0luc3RydWN0aW9uKXtcbiAgICB2YXIgaW5zdHJ1Y3Rpb247XG5cbiAgICBpZihpbmZvLmV4cHJlc3Npb24pe1xuICAgICAgaWYoaW5mby5hdHRyTmFtZSA9PT0gJ3JlZicpe1xuICAgICAgICByZXR1cm4gaW5mby5leHByZXNzaW9uO1xuICAgICAgfVxuXG4gICAgICBpbnN0cnVjdGlvbiA9IGV4aXN0aW5nSW5zdHJ1Y3Rpb24gfHwge2F0dHJOYW1lOmluZm8uYXR0ck5hbWUsIGF0dHJpYnV0ZXM6e319O1xuICAgICAgaW5zdHJ1Y3Rpb24uYXR0cmlidXRlc1tpbmZvLmF0dHJOYW1lXSA9IGluZm8uZXhwcmVzc2lvbjtcbiAgICB9IGVsc2UgaWYoaW5mby5jb21tYW5kKXtcbiAgICAgIGluc3RydWN0aW9uID0gdGhpcy5zeW50YXhJbnRlcnByZXRlci5pbnRlcnByZXQoXG4gICAgICAgIHJlc291cmNlcyxcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgaW5mbyxcbiAgICAgICAgZXhpc3RpbmdJbnN0cnVjdGlvblxuICAgICAgKTtcbiAgICB9XG5cblx0XHRyZXR1cm4gaW5zdHJ1Y3Rpb247XG5cdH1cblxuICBwYXJzZVRleHQocmVzb3VyY2VzLCB2YWx1ZSl7XG4gICAgcmV0dXJuIHRoaXMucGFyc2VDb250ZW50KHJlc291cmNlcywgJ3RleHRDb250ZW50JywgdmFsdWUpO1xuICB9XG5cbiAgcGFyc2VDb250ZW50KHJlc291cmNlcywgYXR0ck5hbWUsIGF0dHJWYWx1ZSl7XG4gICAgdmFyIGkgPSBhdHRyVmFsdWUuaW5kZXhPZignJHsnLCAwKSwgaWkgPSBhdHRyVmFsdWUubGVuZ3RoLFxuICAgICAgICBjaGFyLCBwb3MgPSAwLCBvcGVuID0gMCwgcXVvdGUgPSBudWxsLCBpbnRlcnBvbGF0aW9uU3RhcnQsXG4gICAgICAgIHBhcnRzLCBwYXJ0SW5kZXggPSAwO1xuICAgIHdoaWxlKGkgPj0gMCAmJiBpIDwgaWkgLSAyKSB7XG4gICAgICBvcGVuID0gMTtcbiAgICAgIGludGVycG9sYXRpb25TdGFydCA9IGk7XG4gICAgICBpICs9IDI7XG5cbiAgICAgIGRvIHtcbiAgICAgICAgY2hhciA9IGF0dHJWYWx1ZVtpXTtcbiAgICAgICAgaSsrO1xuICAgICAgICBzd2l0Y2goY2hhcikge1xuICAgICAgICAgIGNhc2UgXCInXCI6XG4gICAgICAgICAgY2FzZSAnXCInOlxuICAgICAgICAgICAgaWYgKHF1b3RlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIHF1b3RlID0gY2hhcjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocXVvdGUgPT09IGNoYXIpIHtcbiAgICAgICAgICAgICAgcXVvdGUgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgY2FzZSAnXFxcXCc6XG4gICAgICAgICAgICBpKys7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChxdW90ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYXIgPT09ICd7Jykge1xuICAgICAgICAgIG9wZW4rKztcbiAgICAgICAgfSBlbHNlIGlmIChjaGFyID09PSAnfScpIHtcbiAgICAgICAgICBvcGVuLS07XG4gICAgICAgIH1cbiAgICAgIH0gd2hpbGUob3BlbiA+IDAgJiYgaSA8IGlpKVxuXG4gICAgICBpZiAob3BlbiA9PT0gMCkge1xuICAgICAgICAvLyBsYXp5IGFsbG9jYXRlIGFycmF5XG4gICAgICAgIHBhcnRzID0gcGFydHMgfHwgW107XG4gICAgICAgIGlmIChhdHRyVmFsdWVbaW50ZXJwb2xhdGlvblN0YXJ0IC0gMV0gPT09ICdcXFxcJyAmJiBhdHRyVmFsdWVbaW50ZXJwb2xhdGlvblN0YXJ0IC0gMl0gIT09ICdcXFxcJykge1xuICAgICAgICAgIC8vIGVzY2FwZWQgaW50ZXJwb2xhdGlvblxuICAgICAgICAgIHBhcnRzW3BhcnRJbmRleF0gPSBhdHRyVmFsdWUuc3Vic3RyaW5nKHBvcywgaW50ZXJwb2xhdGlvblN0YXJ0IC0gMSkgKyBhdHRyVmFsdWUuc3Vic3RyaW5nKGludGVycG9sYXRpb25TdGFydCwgaSk7XG4gICAgICAgICAgcGFydEluZGV4Kys7XG4gICAgICAgICAgcGFydHNbcGFydEluZGV4XSA9IHRoaXMuZW1wdHlTdHJpbmdFeHByZXNzaW9uO1xuICAgICAgICAgIHBhcnRJbmRleCsrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHN0YW5kYXJkIGludGVycG9sYXRpb25cbiAgICAgICAgICBwYXJ0c1twYXJ0SW5kZXhdID0gYXR0clZhbHVlLnN1YnN0cmluZyhwb3MsIGludGVycG9sYXRpb25TdGFydCk7XG4gICAgICAgICAgcGFydEluZGV4Kys7XG4gICAgICAgICAgcGFydHNbcGFydEluZGV4XSA9IHRoaXMucGFyc2VyLnBhcnNlKGF0dHJWYWx1ZS5zdWJzdHJpbmcoaW50ZXJwb2xhdGlvblN0YXJ0ICsgMiwgaSAtIDEpKTtcbiAgICAgICAgICBwYXJ0SW5kZXgrKztcbiAgICAgICAgfVxuICAgICAgICBwb3MgPSBpO1xuICAgICAgICBpID0gYXR0clZhbHVlLmluZGV4T2YoJyR7JywgaSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBubyBpbnRlcnBvbGF0aW9uLlxuICAgIGlmIChwYXJ0SW5kZXggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIGxpdGVyYWwuXG4gICAgcGFydHNbcGFydEluZGV4XSA9IGF0dHJWYWx1ZS5zdWJzdHIocG9zKTtcblxuICAgIHJldHVybiBuZXcgSW50ZXJwb2xhdGlvbkJpbmRpbmdFeHByZXNzaW9uKFxuICAgICAgdGhpcy5vYnNlcnZlckxvY2F0b3IsXG4gICAgICB0aGlzLmF0dHJpYnV0ZU1hcFthdHRyTmFtZV0gfHwgYXR0ck5hbWUsXG4gICAgICBwYXJ0cyxcbiAgICAgIGJpbmRpbmdNb2RlLm9uZVdheSxcbiAgICAgIHJlc291cmNlcy52YWx1ZUNvbnZlcnRlckxvb2t1cEZ1bmN0aW9uLFxuICAgICAgYXR0ck5hbWVcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJbnRlcnBvbGF0aW9uQmluZGluZ0V4cHJlc3Npb24ge1xuICBjb25zdHJ1Y3RvcihvYnNlcnZlckxvY2F0b3IsIHRhcmdldFByb3BlcnR5LCBwYXJ0cyxcbiAgICBtb2RlLCB2YWx1ZUNvbnZlcnRlckxvb2t1cEZ1bmN0aW9uLCBhdHRyaWJ1dGUpe1xuICAgIHRoaXMub2JzZXJ2ZXJMb2NhdG9yID0gb2JzZXJ2ZXJMb2NhdG9yO1xuICAgIHRoaXMudGFyZ2V0UHJvcGVydHkgPSB0YXJnZXRQcm9wZXJ0eTtcbiAgICB0aGlzLnBhcnRzID0gcGFydHM7XG4gICAgdGhpcy5tb2RlID0gbW9kZTtcbiAgICB0aGlzLnZhbHVlQ29udmVydGVyTG9va3VwRnVuY3Rpb24gPSB2YWx1ZUNvbnZlcnRlckxvb2t1cEZ1bmN0aW9uO1xuICAgIHRoaXMuYXR0cmlidXRlID0gYXR0cmlidXRlO1xuICAgIHRoaXMuZGlzY3JldGUgPSBmYWxzZTtcbiAgfVxuXG4gIGNyZWF0ZUJpbmRpbmcodGFyZ2V0KXtcbiAgICByZXR1cm4gbmV3IEludGVycG9sYXRpb25CaW5kaW5nKFxuICAgICAgdGhpcy5vYnNlcnZlckxvY2F0b3IsXG4gICAgICB0aGlzLnBhcnRzLFxuICAgICAgdGFyZ2V0LFxuICAgICAgdGhpcy50YXJnZXRQcm9wZXJ0eSxcbiAgICAgIHRoaXMubW9kZSxcbiAgICAgIHRoaXMudmFsdWVDb252ZXJ0ZXJMb29rdXBGdW5jdGlvblxuICAgICAgKTtcbiAgfVxufVxuXG5jbGFzcyBJbnRlcnBvbGF0aW9uQmluZGluZyB7XG4gIGNvbnN0cnVjdG9yKG9ic2VydmVyTG9jYXRvciwgcGFydHMsIHRhcmdldCwgdGFyZ2V0UHJvcGVydHksIG1vZGUsIHZhbHVlQ29udmVydGVyTG9va3VwRnVuY3Rpb24pe1xuICAgIGlmICh0YXJnZXRQcm9wZXJ0eSA9PT0gJ3N0eWxlJykge1xuICAgICAgbG9nZ2VyLmluZm8oJ0ludGVybmV0IEV4cGxvcmVyIGRvZXMgbm90IHN1cHBvcnQgaW50ZXJwb2xhdGlvbiBpbiBcInN0eWxlXCIgYXR0cmlidXRlcy4gIFVzZSB0aGUgc3R5bGUgYXR0cmlidXRlXFwncyBhbGlhcywgXCJjc3NcIiBpbnN0ZWFkLicpO1xuICAgIH0gZWxzZSBpZiAodGFyZ2V0LnBhcmVudEVsZW1lbnQgJiYgdGFyZ2V0LnBhcmVudEVsZW1lbnQubm9kZU5hbWUgPT09ICdURVhUQVJFQScgJiYgdGFyZ2V0UHJvcGVydHkgPT09ICd0ZXh0Q29udGVudCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW50ZXJwb2xhdGlvbiBiaW5kaW5nIGNhbm5vdCBiZSB1c2VkIGluIHRoZSBjb250ZW50IG9mIGEgdGV4dGFyZWEgZWxlbWVudC4gIFVzZSA8dGV4dGFyZWEgdmFsdWUuYmluZD1cImV4cHJlc3Npb25cIj48L3RleHRhcmVhPiBpbnN0ZWFkLicpO1xuICAgIH1cbiAgICB0aGlzLm9ic2VydmVyTG9jYXRvciA9IG9ic2VydmVyTG9jYXRvcjtcbiAgICB0aGlzLnBhcnRzID0gcGFydHM7XG4gICAgdGhpcy50YXJnZXRQcm9wZXJ0eSA9IG9ic2VydmVyTG9jYXRvci5nZXRPYnNlcnZlcih0YXJnZXQsIHRhcmdldFByb3BlcnR5KTtcbiAgICB0aGlzLm1vZGUgPSBtb2RlO1xuICAgIHRoaXMudmFsdWVDb252ZXJ0ZXJMb29rdXBGdW5jdGlvbiA9IHZhbHVlQ29udmVydGVyTG9va3VwRnVuY3Rpb247XG4gICAgdGhpcy50b0Rpc3Bvc2UgPSBbXTtcbiAgfVxuXG4gIGdldE9ic2VydmVyKG9iaiwgcHJvcGVydHlOYW1lKXtcbiAgICByZXR1cm4gdGhpcy5vYnNlcnZlckxvY2F0b3IuZ2V0T2JzZXJ2ZXIob2JqLCBwcm9wZXJ0eU5hbWUpO1xuICB9XG5cbiAgYmluZChzb3VyY2Upe1xuICAgIHRoaXMuc291cmNlID0gc291cmNlO1xuXG4gICAgaWYodGhpcy5tb2RlID09IGJpbmRpbmdNb2RlLm9uZVdheSl7XG4gICAgICB0aGlzLnVuYmluZCgpO1xuICAgICAgdGhpcy5jb25uZWN0KCk7XG4gICAgICB0aGlzLnNldFZhbHVlKCk7XG4gICAgfWVsc2V7XG4gICAgICB0aGlzLnNldFZhbHVlKCk7XG4gICAgfVxuICB9XG5cbiAgc2V0VmFsdWUoKXtcbiAgICB2YXIgdmFsdWUgPSB0aGlzLmludGVycG9sYXRlKCk7XG4gICAgdGhpcy50YXJnZXRQcm9wZXJ0eS5zZXRWYWx1ZSh2YWx1ZSk7XG4gIH1cblxuICBwYXJ0Q2hhbmdlZChuZXdWYWx1ZSwgb2xkVmFsdWUsIGNvbm5lY3Rpbmcpe1xuICAgIHZhciBtYXAsIGluZm87XG4gICAgaWYgKCFjb25uZWN0aW5nKSB7XG4gICAgICB0aGlzLnNldFZhbHVlKCk7XG4gICAgfVxuICAgIGlmIChvbGRWYWx1ZSBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICBtYXAgPSB0aGlzLmFycmF5UGFydE1hcDtcbiAgICAgIGluZm8gPSBtYXAgPyBtYXAuZ2V0KG9sZFZhbHVlKSA6IG51bGw7XG4gICAgICBpZiAoaW5mbykge1xuICAgICAgICBpbmZvLnJlZnMtLTtcbiAgICAgICAgaWYgKGluZm8ucmVmcyA9PT0gMCkge1xuICAgICAgICAgIGluZm8uZGlzcG9zZSgpO1xuICAgICAgICAgIG1hcC5kZWxldGUob2xkVmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChuZXdWYWx1ZSBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICBtYXAgPSB0aGlzLmFycmF5UGFydE1hcCB8fCAodGhpcy5hcnJheVBhcnRNYXAgPSBuZXcgTWFwKCkpO1xuICAgICAgaW5mbyA9IG1hcC5nZXQobmV3VmFsdWUpO1xuICAgICAgaWYgKCFpbmZvKSB7XG4gICAgICAgIGluZm8gPSB7XG4gICAgICAgICAgcmVmczogMCxcbiAgICAgICAgICBkaXNwb3NlOiB0aGlzLm9ic2VydmVyTG9jYXRvci5nZXRBcnJheU9ic2VydmVyKG5ld1ZhbHVlKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5zZXRWYWx1ZSgpKVxuICAgICAgICB9XG4gICAgICAgIG1hcC5zZXQobmV3VmFsdWUsIGluZm8pO1xuICAgICAgfVxuICAgICAgaW5mby5yZWZzKys7XG4gICAgfVxuICB9XG5cbiAgY29ubmVjdCgpe1xuICAgIHZhciBpbmZvLFxuICAgICAgICBwYXJ0cyA9IHRoaXMucGFydHMsXG4gICAgICAgIHNvdXJjZSA9IHRoaXMuc291cmNlLFxuICAgICAgICB0b0Rpc3Bvc2UgPSB0aGlzLnRvRGlzcG9zZSA9IFtdLFxuICAgICAgICBwYXJ0Q2hhbmdlZCA9IHRoaXMucGFydENoYW5nZWQuYmluZCh0aGlzKSxcbiAgICAgICAgaSwgaWk7XG5cbiAgICBmb3IoaSA9IDAsIGlpID0gcGFydHMubGVuZ3RoOyBpIDwgaWk7ICsraSl7XG4gICAgICBpZiAoaSAlIDIgPT09IDApIHtcbiAgICAgICAgLy9kbyBub3RoaW5nXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbmZvID0gcGFydHNbaV0uY29ubmVjdCh0aGlzLCBzb3VyY2UpO1xuICAgICAgICBpZihpbmZvLm9ic2VydmVyKXtcbiAgICAgICAgICB0b0Rpc3Bvc2UucHVzaChpbmZvLm9ic2VydmVyLnN1YnNjcmliZShwYXJ0Q2hhbmdlZCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbmZvLnZhbHVlIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgICBwYXJ0Q2hhbmdlZChpbmZvLnZhbHVlLCB1bmRlZmluZWQsIHRydWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaW50ZXJwb2xhdGUoKXtcbiAgICB2YXIgdmFsdWUgPSAnJyxcbiAgICAgICAgcGFydHMgPSB0aGlzLnBhcnRzLFxuICAgICAgICBzb3VyY2UgPSB0aGlzLnNvdXJjZSxcbiAgICAgICAgdmFsdWVDb252ZXJ0ZXJMb29rdXBGdW5jdGlvbiA9IHRoaXMudmFsdWVDb252ZXJ0ZXJMb29rdXBGdW5jdGlvbixcbiAgICAgICAgaSwgaWksIHRlbXA7XG5cbiAgICBmb3IoaSA9IDAsIGlpID0gcGFydHMubGVuZ3RoOyBpIDwgaWk7ICsraSl7XG4gICAgICBpZiAoaSAlIDIgPT09IDApIHtcbiAgICAgICAgdmFsdWUgKz0gcGFydHNbaV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0ZW1wID0gcGFydHNbaV0uZXZhbHVhdGUoc291cmNlLCB2YWx1ZUNvbnZlcnRlckxvb2t1cEZ1bmN0aW9uKTtcbiAgICAgICAgdmFsdWUgKz0gKHR5cGVvZiB0ZW1wICE9PSAndW5kZWZpbmVkJyAmJiB0ZW1wICE9PSBudWxsID8gdGVtcC50b1N0cmluZygpIDogJycpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHVuYmluZCgpe1xuICAgIHZhciBpLCBpaSwgdG9EaXNwb3NlID0gdGhpcy50b0Rpc3Bvc2UsIG1hcCA9IHRoaXMuYXJyYXlQYXJ0TWFwO1xuXG4gICAgaWYodG9EaXNwb3NlKXtcbiAgICAgIGZvcihpID0gMCwgaWkgPSB0b0Rpc3Bvc2UubGVuZ3RoOyBpIDwgaWk7ICsraSl7XG4gICAgICAgIHRvRGlzcG9zZVtpXSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudG9EaXNwb3NlID0gbnVsbDtcblxuICAgIGlmIChtYXApIHtcbiAgICAgIGZvcih0b0Rpc3Bvc2Ugb2YgbWFwLnZhbHVlcygpKSB7XG4gICAgICAgIHRvRGlzcG9zZS5kaXNwb3NlKCk7XG4gICAgICB9XG4gICAgICBtYXAuY2xlYXIoKTtcbiAgICB9XG5cbiAgICB0aGlzLmFycmF5UGFydE1hcCA9IG51bGw7XG4gIH1cbn1cbiJdfQ== |